/**
 * Created by lixin on 2019-12-05
 * 员工
 */

const Controller = require('egg').Controller;

class StaffController extends Controller {

    /* 查询接口 */
    async query() {

        const {ctx, service} = this;
        /* 获取入参 */
        const body = ctx.request.body;
        console.log('body', body);
        const staffCode = body.code;

        if (!staffCode) {
            /* 参数错误信息 */
            const errorCode = ctx.helper.PARAMS_ERROR;
            /* 返回参数错误 */
            ctx.helper.error(ctx, null, errorCode.code, errorCode.msg);
        } else {
            /* 由于对 MySQL 数据库的访问操作属于 Web 层中的数据处理层，因此我们强烈建议将这部分代码放在 Service 层中维护。*/
            const result = await service.staff.query(staffCode);

            ctx.helper.success(ctx, result);
        }

    }

    /* 新增接口 */
    async create() {

        const {ctx, service} = this;
        /* 获取入参 */
        const body = ctx.request.body;
        const createRule = {
            name: {type: 'string', required: true},
            age: {type: 'number', required: false},
            message: {type: 'string', required: false},
        };
        try {
            /* 第一个参数就是校验的规则，第二个参数是被校验的参数 */
            ctx.validate(createRule, body);
        } catch (err) {
            ctx.logger.warn(err);
            ctx.helper.error(ctx, null, '0003', err.errors[0]);
            return;
        }
        const params = {
            name: body.name,
            age: body.age || 0,
            message: body.message,
            code: ctx.helper.guid(),
        };
        const result = await service.staff.create(params);
        if (result) {
            ctx.helper.success(ctx);
        } else {
            ctx.helper.error(ctx, null, '0004', '新建失败');
        }

    }

    /* 删除接口 */
    async delete() {
        const {ctx, service} = this;
        const body = ctx.request.body;
        const staffCode = body.code;
        /* 删除必填code */
        if (!staffCode) {
            ctx.helper.error(ctx, null, '0003', 'code必填');
        } else {
            const result = await service.staff.delete(staffCode);
            console.log('result', result)
            if (result) {
                ctx.helper.success(ctx, result);
            } else {
                ctx.helper.error(ctx, null, '0005', '删除数据不存在');
            }

        }
    }

    /* 更新接口 */
    async update() {

        const {ctx, service} = this;
        const body = ctx.request.body;
        const createRule = {
            code: {type: 'string', required: true},
            name: {type: 'string', required: false},
            age: {type: 'number', required: false},
            message: {type: 'string', required: false},
        };
        try {
            /* 第一个参数就是校验的规则，第二个参数是被校验的参数 */
            ctx.validate(createRule, body);
        } catch (err) {
            ctx.logger.warn(err);
            ctx.helper.error(ctx, null, '0003', err.errors[0]);
            return;
        }
        const params = {
            code: body.code,
            name: body.name,
            age: body.age || 0,
            message: body.message,
        };
        console.log(params);
        const result = await service.staff.update(params);
        if (result) {
            ctx.helper.success(ctx);
        } else {
            ctx.helper.error(ctx, null, '0004', '更新失败');
        }


    }
}

module.exports = StaffController;
